home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / Libraries / SAT 2.3.8 / Demos / SAT Invaders demo ƒ / sShot.p < prev    next >
Text File  |  1996-05-23  |  2KB  |  64 lines

  1. {===============================================}
  2. {================= Shot sprite unit ================}
  3. {===============================================}
  4.  
  5. { Example file for Ingemars Sprite Animation Toolkit. }
  6. { © Ingemar Ragnemalm 1992 }
  7. { See doc files for legal terms for using this code. }
  8.  
  9. unit sShot;
  10.  
  11. { Sprite unit. A sprite unit should include the following routines:}
  12. { Init-procedure, that initializes private bitmaps}
  13. { Setup-procedure, that sets variables other than the standard ones set by MakeSprite }
  14. { Handle-procedure, to be called once per iteration until the sprite dies }
  15. { Hittask-procedure (optional), for advanced collission handling. }
  16.  
  17. { Shot object for the SATInvaders sample game. }
  18.  
  19. interface
  20.  
  21.     uses
  22. {$IFC UNDEFINED THINK_PASCAL}
  23.         Types, QuickDraw, Menus, ToolUtils, Resources, {}
  24. {$ENDC}
  25.         SAT, SoundConst, GameGlobals;
  26.  
  27.     procedure InitShot;
  28.     procedure SetupShot (sp: SpritePtr);
  29.     procedure HandleShot (me: SpritePtr);
  30.  
  31. implementation
  32.  
  33.     const
  34.         shotSpeed = 15;
  35.  
  36.     var
  37.         shotFace: FacePtr;
  38.  
  39.     procedure InitShot;
  40.     begin
  41.         shotFace := SATGetFace(135);
  42.     end;
  43.  
  44.     procedure SetupShot (sp: SpritePtr);
  45.     begin
  46.         sp^.face := shotFace;
  47.         SetRect(sp^.hotRect, 0, 0, 8, 12); {How big are we?}
  48.         sp^.task := @HandleShot;
  49.     end;
  50.  
  51.     procedure HandleShot (me: SpritePtr);
  52.     begin
  53.         if me^.kind <> 1 then {Hit something - remove}
  54.             begin
  55.                 me^.task := nil;
  56. {No sound here - we assume that the bad guys (sEnemy and sMissile) do that }
  57.             end;
  58.  
  59.         me^.position.v := me^.position.v - shotSpeed;
  60.         if me^.position.v < 0 then
  61.             me^.task := nil; {Outside - remove}
  62.     end;
  63.  
  64. end.